//
//  CZEmoticon.swift
//  weibo
//
//  Created by Apple on 16/3/20.
//  Copyright © 2016年 KY. All rights reserved.
//

import UIKit

class CZEmoticon: NSObject, NSCoding {
    //  图片描述
    var chs: String?
    //  图片名称
    var png: String?
    //  图片类型 0-图片，1-emoji
    var type: String? {
        didSet {
//            if type == "0" {
//                isEmoji = false
//            } else {
//                isEmoji = true
//            }
            isEmoji = type == "1"
        }
    }
    //  emoji表情字符串
    var code: String?
    //  图片的前半段路径
    var path: String? {
        didSet {
            if !isEmoji {
                //  如果是图片，则前半段路径加上图片名称
                fullPath = path! + "/" + png!
            }
        
        }
    }
    //  显示图片的全路径
    var fullPath: String?
    //  是否是emoji表情
    var isEmoji: Bool = false
    init(dic: [String: AnyObject]) {
        super.init()
        setValuesForKeysWithDictionary(dic)
    }
    
    // MARK:    解档与归档
    required init?(coder aDecoder: NSCoder) {
        chs = aDecoder.decodeObjectForKey("chs") as? String
        png = aDecoder.decodeObjectForKey("png") as? String
        type = aDecoder.decodeObjectForKey("type") as? String
        code = aDecoder.decodeObjectForKey("code") as? String
        path = aDecoder.decodeObjectForKey("path") as? String
        fullPath = aDecoder.decodeObjectForKey("fullPath") as? String
        isEmoji = aDecoder.decodeBoolForKey("isEmoji")
    }
    
    func encodeWithCoder(aCoder: NSCoder) {
        aCoder.encodeObject(chs, forKey: "chs")
        aCoder.encodeObject(png, forKey: "png")
        aCoder.encodeObject(type, forKey: "type")
        aCoder.encodeObject(code, forKey: "code")
        aCoder.encodeObject(path, forKey: "path")
        aCoder.encodeObject(fullPath, forKey: "fullPath")
        aCoder.encodeBool(isEmoji, forKey: "isEmoji")
        
    }
    
    //  防止kvc不对应奔溃
    override func setValue(value: AnyObject?, forUndefinedKey key: String) {
        
    }
    
    //  重写isEqual
    override func isEqual(object: AnyObject?) -> Bool {
        //  外界数组会移除调用isEqual方法对比当前对象，object是数组传入的对象,底层应该是同过当前对象调用iseqal方法一次循环传入数组对象对比
        guard let emoticon = object as? CZEmoticon else {
            return super.isEqual(object)
        }
        //  判断是否是统一类型，只有统一类型才有可能出现重复的表情
        if emoticon.isEmoji == isEmoji {
            //  如果是emoji则判断code是否一样
            if emoticon.isEmoji {
                if (emoticon.code! as NSString).isEqualToString(code!) {
                    return true
                }
            } else {
                //  不是emoji判断chs是否一样
                if (emoticon.chs! as NSString).isEqualToString(chs!) {
                    return true
                }
            }
        }
        
        return super.isEqual(object)
    }
}
